/**
 * 学生管理 API
 */

import { get, post, put, del, upload, download } from '@/utils/request'

/**
 * 获取学生列表
 * @param {Object} params { page, pageSize, studentId, name, className, dormitory }
 * @returns {Promise}
 */
export function getStudentList(params) {
    return get('/student/list', params)
}

/**
 * 获取学生详情
 * @param {String|Number} id 学生ID
 * @returns {Promise}
 */
export function getStudentDetail(id) {
    return get(`/student/detail`, { id })
}

/**
 * 添加学生
 * @param {Object} data 学生信息
 * @returns {Promise}
 */
export function addStudent(data) {
    return post('/student/add', data)
}

/**
 * 更新学生信息
 * @param {String|Number} id 学生ID
 * @param {Object} data 学生信息
 * @returns {Promise}
 */
export function updateStudent(id, data) {
    return post('/student/update', { ...data, id })
}

/**
 * 删除学生
 * @param {String|Number} id 学生ID
 * @returns {Promise}
 */
export function deleteStudent(id) {
    return del(`/student/delete/${id}`)
}

/**
 * 批量删除学生
 * @param {Array} ids 学生ID数组
 * @returns {Promise}
 */
export function batchDeleteStudents(ids) {
    return post('/student/batch-delete', ids)
}

/**
 * 导入学生数据
 * @param {File} file Excel 文件
 * @param {Function} onProgress 上传进度回调
 * @returns {Promise}
 */
export function importStudents(file, onProgress) {
    const formData = new FormData()
    formData.append('file', file)
    return upload('/student/import', formData, onProgress)
}

/**
 * 导出学生数据
 * @param {Object} params 搜索条件
 * @returns {Promise}
 */
export function exportStudents(params = {}) {
    const filename = `学生列表_${new Date().toISOString().slice(0, 10)}.xlsx`
    return download('/student/export', params, filename)
}

/**
 * 下载学生导入模板
 * @returns {Promise}
 */
export function downloadStudentTemplate() {
    return download('/student/template', {}, '学生信息导入模板.xlsx')
}

/**
 * 获取学生统计信息
 * @returns {Promise}
 */
export function getStudentStatistics() {
    return get('/student/statistics')
}

/**
 * 自动分配宿舍
 * @returns {Promise}
 */
export function allocateDormitory() {
    return post('/student/allocate-dormitory')
}

